package com.pinea;

import com.sun.jna.Library;
import com.sun.jna.Pointer;

/**
 * Pinea 引擎 JNA 绑定接口
 */
public interface PineaLib extends Library {

    /**
     * 初始化窗口
     *
     * @param title  窗口标题
     * @param width  窗口宽度
     * @param height 窗口高度
     */
    void pineaInit(String title, int width, int height);

    /**
     * 退出并释放所有资源
     */
    void pineaQuit();

    /**
     * 显示窗口
     */
    void pineaShow();

    /**
     * 处理事件队列
     *
     * @param event 接收事件的结构体指针
     * @return 是否有事件被处理（true 表示有事件）
     */
    boolean pineaPollEvent(PineaEvent event);

    /**
     * 清空屏幕为指定颜色
     *
     * @param color 颜色结构体指针
     */
    void pineaClear(PineaColor color);

    /**
     * 刷新渲染，将绘制内容显示到屏幕
     */
    void pineaRender();

    /**
     * 绘制填充矩形
     *
     * @param rect  矩形位置和大小结构体
     * @param color 矩形颜色结构体
     */
    void pineaFillRect(PineaRect rect, PineaColor color);

    /**
     * 加载图像文件
     *
     * @param path 图像文件路径
     * @return 图像资源指针（PineaImage 结构体指针）
     */
    Pointer pineaLoadImage(String path);

    /**
     * 绘制图像
     *
     * @param image   图像资源指针
     * @param srcRect 源图像裁剪区域（可为 null 表示绘制整个图像）
     * @param dstRect 目标绘制区域（可为 null 表示全屏绘制）
     * @param angle   旋转角度（弧度）
     * @param flip    翻转模式（PINEA_FLIP_HORIZONTAL 等组合）
     */
    void pineaDrawImage(Pointer image, PineaRect srcRect, PineaRect dstRect, double angle, int flip);

    /**
     * 释放图像资源
     *
     * @param image 图像资源指针
     */
    void pineaDropImage(Pointer image);

    // 音频播放相关函数

    /**
     * 加载音乐文件（长时间播放的音频）
     *
     * @param path 音乐文件路径
     * @return 音频资源指针（PineaAudio 结构体指针）
     */
    Pointer pineaLoadMusic(String path);

    /**
     * 播放音乐
     *
     * @param audio 音频资源指针
     * @param loop  是否循环播放（true 表示无限循环）
     */
    void pineaPlayMusic(Pointer audio, boolean loop);

    /**
     * 暂停音乐播放
     */
    void pineaPauseMusic();

    /**
     * 恢复音乐播放
     */
    void pineaResumeMusic();

    /**
     * 停止音乐播放
     */
    void pineaStopMusic();

    /**
     * 释放音乐资源
     *
     * @param audio 音频资源指针
     */
    void pineaDropMusic(Pointer audio);

    /**
     * 加载音效文件（短时间播放的音频）
     *
     * @param path 音效文件路径
     * @return 音频资源指针（PineaAudio 结构体指针）
     */
    Pointer pineaLoadSound(String path);

    /**
     * 播放音效
     *
     * @param audio 音频资源指针
     * @param loops 循环次数（0 表示播放一次，-1 表示无限循环）
     */
    void pineaPlaySound(Pointer audio, int loops);

    /**
     * 释放音效资源
     *
     * @param audio 音频资源指针
     */
    void pineaDropSound(Pointer audio);

    /**
     * 获取当前时间（单位：纳秒）
     *
     * @return 当前时间戳（纳秒）
     */
    long pineaGetTime();

}